Computer software is written by software developers using one or more software development programs. Traditional software applications are typically designed from the bottom up, meaning that the detailed components are first defined, and then composed into systems that can be further composed into higher-level systems. The bottom-up approach to software development encourages the software developer to think about the implementation details of the software at the very earliest stages of development. This often causes technology decisions to be made too early.
To address the problems to bottom-up software development, some top-down software development programs have been introduced. Using a top-down approach, systems are designed by starting with a high-level system design, and then by further refined down to the level of detailed components that implement the design. One problem with such top-down software development programs of today is that they do not allow the user to evolve their design without affecting higher level connections.